home *** CD-ROM | disk | FTP | other *** search
- unit Unit62;
- interface
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- Db, DBClient, Grids, DBGrids, StdCtrls;
-
- type
- TForm1 = class(TForm)
- CDS: TClientDataSet;
- DataSource1: TDataSource;
- DBGrid1: TDBGrid;
- ButtonCancel: TButton;
- ButtonOK: TButton;
- Label1: TLabel;
- EditFileName: TEdit;
- CDSFieldName: TStringField;
- CDSFieldType: TStringField;
- CDSSize: TStringField;
- procedure ButtonOKClick(Sender: TObject);
- end;
-
- var
- Form1: TForm1;
-
- implementation
- {$R *.DFM}
-
- procedure TForm1.ButtonOKClick(Sender: TObject);
- var
- F: System.Text;
-
- function Print(Str: String): String;
- { Convert a fieldname to a printable name }
- var
- i: Integer;
- begin
- for i:=Length(Str) downto 1 do
- if not (UpCase(Str[i]) in ['A'..'Z','1'..'9']) then
- Str[i] := '_';
- Result := Str
- end {Printable};
-
- begin
- System.Assign(F,EditFileName.Text);
- try
- System.Rewrite(F);
- writeln(F,'<?xml version="1.0" standalone="yes"?>');
- writeln(F,'<DATAPACKET Version="2.0">');
- writeln(F,'<METADATA>');
- writeln(F,'<FIELDS>');
- CDS.First;
- while not CDS.Eof do
- begin
- write(F,' <FIELD ');
- if Print(CDSFieldName.AsString) <> CDSFieldName.AsString then { fieldname }
- write(F,'fieldname="'+CDSFieldName.AsString+'" ');
- write(F,'attrname="'+Print(CDSFieldName.AsString)+'" fieldtype="');
- if CDSFieldType.AsString = 'AutoInc' then
- write(F,'i4" readonly="true" SUBTYPE="Autoinc') // AutoInc
- else if CDSFieldType.AsString = 'Integer' then
- write(F,'i4') // Integer
- else if CDSFieldType.AsString = 'Smallint' then
- write(F,'i2') // Smallint
- else if (CDSFieldType.AsString = 'String') or
- (CDSFieldType.AsString = 'WideString') or
- (CDSFieldType.AsString = 'FixedChar') then
- write(F,'string') // FixedChar, String, WideString
- else if CDSFieldType.AsString = 'Memo' then
- write(F,'bin.hex" SUBTYPE="Text') // Memo
- else if CDSFieldType.AsString = 'BCD' then
- write(F,'fixed') // BCD
- else if (CDSFieldType.AsString = 'Blob') or
- (CDSFieldType.AsString = 'VarBytes') then
- write(F,'bin.hex" SUBTYPE="Binary') // Blob, VarBytes
- else if CDSFieldType.AsString = 'Boolean' then
- write(F,'boolean') // Boolean
- else if CDSFieldType.AsString = 'Bytes' then
- write(F,'bin.hex') // Bytes
- else if CDSFieldType.AsString = 'Currency' then
- write(F,'r8" SUBTYPE="Money') // Currency
- else if CDSFieldType.AsString = 'Date' then
- write(F,'date') // Date
- else if CDSFieldType.AsString = 'DateTime' then
- write(F,'datetime') // DateTime
- else if (CDSFieldType.AsString = 'dBaseOle') or
- (CDSFieldType.AsString = 'ParadoxOle') then
- write(F,'bin.hex" SUBTYPE="Ole') // dBaseOle, ParadoxOle
- else if (CDSFieldType.AsString = 'Float') or
- (CDSFieldType.AsString = 'Word') then
- write(F,'r8') // Float, Word
- else if CDSFieldType.AsString = 'FmtMemo' then
- write(F,'bin.hex" SUBTYPE="Formatted') // FmtMemo
- else if (CDSFieldType.AsString = 'Graphic') or
- (CDSFieldType.AsString = 'TypedBinary') then
- write(F,'bin.hex" SUBTYPE="Graphics') // Graphic, TypedBinary
- else if CDSFieldType.AsString = 'Time' then
- write(F,'time'); // Time
- if Length(CDSSize.AsString) > 0 then // 9,17,21
- write(F,'" WIDTH="',CDSSize.AsString);
- writeln(F,'"/>');
- CDS.Next
- end;
- writeln(F,'</FIELDS>');
- writeln(F,'</METADATA>');
- writeln(F,'<ROWDATA>');
- writeln(F,'</ROWDATA>');
- writeln(F,'</DATAPACKET>');
- finally
- System.Close(F)
- end;
- Close
- end;
-
- end.
-